---
title: 'Server Management'
description: 'Centrally manage multiple MCP servers with hot-swappable configuration'
---

## Overview

AIAgentDNS·DNSNode's server management system allows you to centrally configure, monitor, and control multiple MCP (Model Context Protocol) servers from a single dashboard. All changes are applied in real-time without requiring server restarts.

## Adding MCP Servers

### Via Dashboard

1. **Access the Dashboard**: Navigate to `http://localhost:3000` and log in
2. **Click "Add Server"**: Located in the servers section
3. **Fill Server Details**:
   - **Name**: Unique identifier for the server
   - **Command**: Executable command (e.g., `npx`, `uvx`, `python`)
   - **Arguments**: Array of command arguments
   - **Environment Variables**: Key-value pairs for environment setup
   - **Working Directory**: Optional working directory for the command

### Via Configuration File

Edit your `mcp_settings.json` file:

```json
{
  "mcpServers": {
    "server-name": {
      "command": "command-to-run",
      "args": ["arg1", "arg2"],
      "env": {
        "API_KEY": "your-api-key",
        "CONFIG_VALUE": "some-value"
      },
      "cwd": "/optional/working/directory"
    }
  }
}
```

### Via API

Use the REST API to add servers programmatically:

```bash
curl -X POST http://localhost:3000/api/servers \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -d '{
    "name": "fetch-server",
    "command": "uvx",
    "args": ["mcp-server-fetch"],
    "env": {}
  }'
```

## Popular MCP Server Examples

<AccordionGroup>
  <Accordion title="Web Fetch Server">
    Provides web scraping and HTTP request capabilities:

    ```json
    {
      "fetch": {
        "command": "uvx",
        "args": ["mcp-server-fetch"]
      }
    }
    ```

    **Available Tools:**
    - `fetch`: Make HTTP requests
    - `fetch_html`: Scrape web pages
    - `fetch_json`: Get JSON data from APIs

  </Accordion>

  <Accordion title="Playwright Browser Automation">
    Browser automation for web interactions:

    ```json
    {
      "playwright": {
        "command": "npx",
        "args": ["@playwright/mcp@latest", "--headless"]
      }
    }
    ```

    **Available Tools:**
    - `playwright_navigate`: Navigate to web pages
    - `playwright_screenshot`: Take screenshots
    - `playwright_click`: Click elements
    - `playwright_fill`: Fill forms

  </Accordion>

  <Accordion title="File System Operations">
    File and directory management:

    ```json
    {
      "filesystem": {
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-filesystem", "/allowed/path"]
      }
    }
    ```

    **Available Tools:**
    - `read_file`: Read file contents
    - `write_file`: Write to files
    - `create_directory`: Create directories
    - `list_directory`: List directory contents

  </Accordion>

  <Accordion title="SQLite Database">
    Database operations:

    ```json
    {
      "sqlite": {
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-sqlite", "/path/to/database.db"]
      }
    }
    ```

    **Available Tools:**
    - `execute_query`: Execute SQL queries
    - `describe_tables`: Get table schemas
    - `create_table`: Create new tables

  </Accordion>

  <Accordion title="Slack Integration">
    Slack workspace integration:

    ```json
    {
      "slack": {
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-slack"],
        "env": {
          "SLACK_BOT_TOKEN": "xoxb-your-bot-token",
          "SLACK_TEAM_ID": "T1234567890"
        }
      }
    }
    ```

    **Available Tools:**
    - `send_slack_message`: Send messages to channels
    - `list_slack_channels`: List available channels
    - `get_slack_thread`: Get thread messages

  </Accordion>

  <Accordion title="GitHub Integration">
    GitHub repository operations:

    ```json
    {
      "github": {
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-github"],
        "env": {
          "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token"
        }
      }
    }
    ```

    **Available Tools:**
    - `create_or_update_file`: Create/update repository files
    - `search_repositories`: Search GitHub repositories
    - `create_issue`: Create issues
    - `create_pull_request`: Create pull requests

  </Accordion>

  <Accordion title="Google Drive">
    Google Drive file operations:

    ```json
    {
      "gdrive": {
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-gdrive"],
        "env": {
          "GDRIVE_CLIENT_ID": "your-client-id",
          "GDRIVE_CLIENT_SECRET": "your-client-secret",
          "GDRIVE_REDIRECT_URI": "your-redirect-uri"
        }
      }
    }
    ```

    **Available Tools:**
    - `gdrive_search`: Search files and folders
    - `gdrive_read`: Read file contents
    - `gdrive_create`: Create new files

  </Accordion>

  <Accordion title="Amap Maps (China)">
    Chinese mapping and location services:

    ```json
    {
      "amap": {
        "command": "npx",
        "args": ["-y", "@amap/amap-maps-mcp-server"],
        "env": {
          "AMAP_MAPS_API_KEY": "your-api-key"
        }
      }
    }
    ```

    **Available Tools:**
    - `search_location`: Search for locations
    - `get_directions`: Get route directions
    - `reverse_geocode`: Convert coordinates to addresses

  </Accordion>
</AccordionGroup>

## Server Lifecycle Management

### Starting Servers

Servers are automatically started when:

- AIAgentDNS·DNSNode boots up
- A server is added via the dashboard or API
- A server configuration is updated
- A stopped server is manually restarted

### Stopping Servers

You can stop servers:

- **Via Dashboard**: Toggle the server status switch
- **Via API**: Send a POST request to `/api/servers/{name}/toggle`
- **Automatically**: Servers stop if they crash or encounter errors

### Restarting Servers

Servers are automatically restarted:

- When configuration changes are made
- After environment variable updates
- When manually triggered via dashboard or API

## Server Status Monitoring

### Status Indicators

Each server displays a status indicator:

- 🟢 **Running**: Server is active and responding
- 🟡 **Starting**: Server is initializing
- 🔴 **Stopped**: Server is not running
- ⚠️ **Error**: Server encountered an error

### Real-time Logs

View server logs in real-time:

1. **Dashboard Logs**: Click on a server to view its logs
2. **API Logs**: Access logs via `/api/logs` endpoint
3. **Streaming Logs**: Subscribe to log streams via WebSocket

### Health Checks

AIAgentDNS·DNSNode automatically performs health checks:

- **Initialization Check**: Verifies server starts successfully
- **Tool Discovery**: Confirms available tools are detected
- **Response Check**: Tests server responsiveness
- **Resource Monitoring**: Tracks CPU and memory usage

## Configuration Management

### Environment Variables

Servers can use environment variables for configuration:

```json
{
  "server-name": {
    "command": "python",
    "args": ["server.py"],
    "env": {
      "API_KEY": "${YOUR_API_KEY}",
      "DEBUG": "true",
      "MAX_CONNECTIONS": "10"
    }
  }
}
```

**Environment Variable Expansion:**

- `${VAR_NAME}`: Expands to environment variable value
- `${VAR_NAME:-default}`: Uses default if variable not set
- `${VAR_NAME:+value}`: Uses value if variable is set

### Working Directory

Set the working directory for server execution:

```json
{
  "server-name": {
    "command": "./local-script.sh",
    "args": [],
    "cwd": "/path/to/server/directory"
  }
}
```

### Command Variations

Different ways to specify server commands:

<Tabs>
  <Tab title="npm/npx">
    ```json
    {
      "npm-server": {
        "command": "npx",
        "args": ["-y", "package-name", "--option", "value"]
      }
    }
    ```
  </Tab>

  <Tab title="Python/uvx">
    ```json
    {
      "python-server": {
        "command": "uvx",
        "args": ["package-name", "--config", "config.json"]
      }
    }
    ```
  </Tab>

  <Tab title="Direct Python">
    ```json
    {
      "direct-python": {
        "command": "python",
        "args": ["-m", "module_name", "--arg", "value"]
      }
    }
    ```
  </Tab>

  <Tab title="Local Script">
    ```json
    {
      "local-script": {
        "command": "./server.sh",
        "args": ["--port", "8080"],
        "cwd": "/path/to/script"
      }
    }
    ```
  </Tab>
</Tabs>

## Advanced Features

### Hot Reloading

AIAgentDNS·DNSNode supports hot reloading of server configurations:

1. **Config File Changes**: Automatically detects changes to `mcp_settings.json`
2. **Dashboard Updates**: Immediately applies changes made through the web interface
3. **API Updates**: Real-time updates via REST API calls
4. **Zero Downtime**: Graceful server restarts without affecting other servers

### Resource Limits

Control server resource usage:

```json
{
  "resource-limited-server": {
    "command": "memory-intensive-server",
    "args": [],
    "limits": {
      "memory": "512MB",
      "cpu": "50%",
      "timeout": "30s"
    }
  }
}
```

### Dependency Management

Handle server dependencies:

<AccordionGroup>
  <Accordion title="Auto-installation">
    AIAgentDNS·DNSNode can automatically install missing packages:

    ```json
    {
      "auto-install-server": {
        "command": "npx",
        "args": ["-y", "package-that-might-not-exist"],
        "autoInstall": true
      }
    }
    ```

  </Accordion>

  <Accordion title="Pre-installation Scripts">
    Run setup scripts before starting servers:

    ```json
    {
      "setup-server": {
        "preStart": ["npm install", "pip install -r requirements.txt"],
        "command": "python",
        "args": ["server.py"]
      }
    }
    ```

  </Accordion>
</AccordionGroup>

## Troubleshooting

<AccordionGroup>
  <Accordion title="Server Won't Start">
    **Check the following:**
    - Command is available in PATH
    - All required environment variables are set
    - Working directory exists and is accessible
    - Network ports are not blocked
    - Dependencies are installed

    **Debug steps:**
    1. Check server logs in the dashboard
    2. Test command manually in terminal
    3. Verify environment variable expansion
    4. Check file permissions

  </Accordion>

  <Accordion title="Server Keeps Crashing">
    **Common causes:**
    - Invalid configuration parameters
    - Missing API keys or credentials
    - Resource limits exceeded
    - Dependency conflicts

    **Solutions:**
    1. Review server logs for error messages
    2. Test with minimal configuration
    3. Verify all credentials and API keys
    4. Check system resource availability

  </Accordion>

  <Accordion title="Tools Not Appearing">
    **Possible issues:**
    - Server not fully initialized
    - Tool discovery timeout
    - Communication protocol mismatch
    - Server reporting errors

    **Debug steps:**
    1. Wait for server initialization to complete
    2. Check server logs for tool registration messages
    3. Test direct communication with server
    4. Verify MCP protocol compatibility

  </Accordion>
</AccordionGroup>

## Next Steps

<CardGroup cols={2}>
  <Card title="Group Management" icon="users" href="/features/group-management">
    Organize servers into logical groups
  </Card>
  <Card title="Smart Routing" icon="route" href="/features/smart-routing">
    Set up AI-powered tool discovery
  </Card>
  <Card title="API Reference" icon="code" href="/api-reference/servers">
    Server management API documentation
  </Card>
  <Card title="Configuration Guide" icon="cog" href="/configuration/mcp-settings">
    Detailed configuration options
  </Card>
</CardGroup>
